package com.warm.spring.mvc;

import com.warm.spring.mvc.listener.MyEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;

@Service
public class MyListenerService {

    /**
     * ApplicationContext --> Spring 中的高级容器:
     *                        可以获取容器中的各种 bean 组件,
     *                        注册监听事件,
     *                        加载资源文件等功能
     *  Way of get ApplicationContext
     *      1. @Resource, @Autowired ApplicationContext
     *      2. implements ApplicationContextAware (Recommend)
     */

    @Autowired
    ApplicationContext applicationContext;

    /**
     * 执行简单事件
     */
    public void doSomething(){
        // 1. 执行一个事件
        System.out.println("I have do something!");

        // 2.  调用事件发布者发布事件,解耦
        // 利用spring的事件机制 -- 实现业务拓展 -- 发布事件
        // publishEvent --> multicastEvent(); find spring create listener object by type --> invoke
        applicationContext.publishEvent(new MyEvent(applicationContext));
    }
}
